#include "math.h"
#include <algorithm>
#include <string>
#include <sstream>
#include <fstream>
#include <iostream>
#include <vector>
#include <map>
#include <sys/time.h>
#include <unistd.h>
#include "Matrix.h"
#include "nw_aligner_simple.cpp"

using namespace Numeric_lib;
using namespace std;

int main( int argc, char *argv[] ) {
    // some test
    double score;
    string s1 = "ACTGGACTGACTGACTGGACTGGTTTTTTCACTGGACACTGGACACTGGACACCCCACTGACTGGACTGACTGACTGGACTGACTGACTGGACTGACTGACTGGACTGACTGACTGGACTGACTGACTGGACTGACTG";
    string s2 = "ACTGGACACTGGACACTGGACA";
    string gene = "atgagtgctgagatattggcgagagtacagtttgcgttgtttatcggatttcattatctgtttgtccccattagtttgggattaagtatgatgattgttcttatggaggggctctacttattcacaaaaaaaagtatttataagcagttgacctggttttggattaggattttcaccttaacttttgttgttggcgttgtcacaggattgatgcagattttttccttcggagcaaattggtctcgattcgcagaatatactggaaacgtatttggaatgttccttggtagcgagggaatgtttgctttcttcttagaatctggatttctaggagttttgttatttggtcgctataaagtatcaaaaaaaatgcactttttttcagcctgtatggttgcgctcggcgctcacatgagtgctttttggattgtttgtgcgaactcttggatgcaaacgccttccggttatgaaatggtcatgcgtaatggtatgttagttccccaaatgacttctttttgggcagcggtgttgtctccttctgctttgcagcgttttacacatgttgttcttggcgcttggttatctgggatatttcttgttctttccgttagtgctcactatctacgtaaagagcggcataaagattttgcaaatcaggggttaaaaatcagcatgttttgtgctttccttgttttggctttgcagctttggtcagcagatgtcactgcaagaggggtcgctaaacaccaacctgccaagcttgctgcgtttgaaggtgtttttaagactcaaggacacaccccaatttatttactcggcattgtagatatgaaaaaagagcgagtcattgggatccccattccttctggtttatcgcttcttgttcaccgaaatgcaaaaactcctgttacaggactggatcagttccctaaagacgaatggccaaatgtcgctttcgtttttcaaacgtatcacttaatggtcatgttatggggagtaatggtacttttagctctgatagcctttgctgtgtataagaaaaaatcttggagctgcaagaaggggatcttatggatactttccttctctgtgctatgtcctgagttatgtaatgaaatcggctggatttctacagaggtagggcgtcaaccttgggttgtttatggcttattaaaaactaaagatgcgacctctcctatcgtgaacgcagggcaaatttggcagtctttgatcctgttttcgattatttttatttgtttattaagtgtctttgtctcgcttcttttgaaaaagataggtgagggaccagatgagcaagaccttatagaagtagatttgtga";
    
    //Matrix<MICell, 2> matrix(10000, 10000);
    MICell* matrix = new MICell[(10000+1)*(10000+1)];

    double start_time = cur_time();
    score = nw_score_mk(1, 3, 5, 2, gene, gene, matrix, 100);
    //int step = max(10, l2/10);
    //score = get_best_nw_score(s1, s2, 30, 40, step);

    std::cout << "Score:\t" << score << "\n";
    std::cout << "Time:\t" << cur_time()-start_time << "\n";

    return 0;

}
